/**
 * 
 */
package org.jenkon.commons.collection.iterator;


/**
 * @author Jens Konopka
 *
 * @param <E> the enum type
 */
public class EnumIterator<E extends Enum<E>> extends ArrayIterator<E> {
	
//	private final E[] values;
//	private E current;
//	private int position;

	/**
	 * @param cls Enum {@link Class}
	 */
	@SuppressWarnings("unchecked")
	public EnumIterator(final Class<? extends Enum<?>> cls) {
		super((E[]) get(cls));
		//this.values = get(cls);
	}
	
	/**
	 * @param cls {@link Enum} class
	 * @return Enum values array
	 */
	@SuppressWarnings("unchecked")
	private static <E> E[] get(final Class<? extends Enum<?>> cls) {
		try {
			return (E[]) cls.getDeclaredMethod("values").invoke(null);
		} catch (final Exception e) {
			e.printStackTrace();
		}
		return null; 
	}
	
//	/*
//	 * (non-Javadoc)
//	 * 
//	 * @see java.util.Iterator#hasNext()
//	 */
//	public boolean hasNext() {
//		return position < values.length;
//	}
//
//	/*
//	 * (non-Javadoc)
//	 * 
//	 * @see java.util.Iterator#next()
//	 */
//	public E next() {
//		current = values[position++];
//		return current;
//	}
//
//	/*
//	 * (non-Javadoc)
//	 * 
//	 * @see java.util.Iterator#remove()
//	 */
//	public void remove() {
//		throw new UnsupportedOperationException("remove ist not supported on " + this);
//	}
//
//	/*
//	 * (non-Javadoc)
//	 * 
//	 * @see org.jenkon.iterator.OrderedIterator#hasPrevious()
//	 */
//	public boolean hasPrevious() {
//		return position > 0;
//	}
//
//	/*
//	 * (non-Javadoc)
//	 * 
//	 * @see org.jenkon.iterator.OrderedIterator#previous()
//	 */
//	public E previous() {
//		current = values[--position];
//		return current;
//	}
//
//	/*
//	 * (non-Javadoc)
//	 * 
//	 * @see org.jenkon.iterator.OrderedIterator#current()
//	 */
//	public E current() {
//		if (position == 0) {
//			return values[0];
//		}
//		return current;
//	}

}
